<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>继承</title>
</head>

<body>
  <script>
    // ------------------------------例一--------------------
    // class Father {
    //   constructor(uname, age) {
    //     this.uname = uname;
    //     this.age = age;
    //   }
    //   say() {
    //     console.log(111);
    //   }
    // }
    // class Son extends Father {
    //   // 子类继承父类之后，写constructor就必须写上super
    //   constructor(uname, age, score) {
    //     super(uname, age); //继承父类的属性
    //     this.score = score; //下面继续写自己的属性
    //   }
    // }

    // var xm = new Son('小明', 12, 99)
    // console.log(xm);
    // xm.say();

    // ------------------------------例二--------------------
    // class Father {
    //   constructor(x, y) {
    //     this.x = x;
    //     this.y = y;
    //   }
    //   sum() {
    //     console.log(this.x + this.y);
    //   }
    // }
    // class Son extends Father {
    //   constructor(x, y) {
    //     super(x, y)
    //   }
    // }
    // var xm = new Son(1, 2);
    // xm.sum();  // 3

    // ------------------------------例三--------------------
    // class Father {
    //   say() {
    //     console.log('我是父类');
    //   }
    // }
    // class Son extends Father {
    //   say() {
    //     console.log('我是子类');
    //   }
    // }
    // var xm = new Son();
    // xm.say();  //我是子类
    // // 当子类本身有某个方法时 就会调用本身的方法 若本身没有该方法 就会去父类上找

    // ------------------------------例四--------------------
    // class Father {
    //   say() {
    //     console.log(1111);
    //   }
    // }
    // class Son extends Father {
    //   say() {
    //     super.say(); //先继承父类的方法
    //     console.log(2222);  //再执行自己的方法
    //   }
    // }

    // var xm = new Son();
    // xm.say(); // 11111 2222

    // ------------------------------例五--------------------
    // super必须写在子类中的this之前
    class Father {
      constructor(x, y) {
        this.x = x;
        this.y = y;
      }
      sum() {
        console.log(this.x + this.y);
      }
    }

    class Son extends Father {
      constructor(x, y) {
        // 注意： super必须写在子类中的this之前！！！！！！！！！！
        super(x, y);
        this.x = x;
        this.y = y;
      }
      subtract() {
        console.log(this.x - this.y);
      }
    }

    var son = new Son(10, 3)
    son.subtract();
    son.sum();
  </script>
</body>

</html>